'''
线程, 进程
进程: 资源单位  每一个进程至少要有一个线程
线程: 执行单位
'''

# 启动每一个程序默认都会有一个主线程
# 单线程
# def func():
#     for i in range(1000):
#         print("func", i)
#
# if __name__ == '__main__':
#     func()
#     for i in range(1000):
#         print("main", i)



# 多线程
from threading import Thread  # 线程类

# 第一套多线程写法
# 无参数
# def func():
#     for i in range(1000):
#         print("func", i)
#
# if __name__ == '__main__':
#     t = Thread(target=func)  # 创建线程并给线程安排任务
#     t.start()  # 多线程状态为可以开始工作状态, 具体的执行时间由CPU 决定
#
#     for i in range(1000):
#         print("main", i)


# 创建多个线程且有参数
# 传的参数必须是元组
# def func(name):
#     for i in range(1000):
#         print(name, i)
#
# if __name__ == '__main__':
#     jay = Thread(target=func, args=("周杰伦", ))  # 创建线程并给线程安排任务
#     jay.start()  # 多线程状态为可以开始工作状态, 具体的执行时间由CPU 决定
#
#     hong = Thread(target=func, args=("王力宏", ))
#     hong.start()


# 第二套多线程写法
# 无参数
# class MyThread(Thread):
#     def run(self):  # 固定的 -> 当线程被执行时, 被执行的就是run()
#         for i in range(1000):
#             print("子线程", i)
#
# if __name__ == '__main__':
#     t = MyThread()
#     # t.run()  # 表示方法被调用  -> 还是单线程
#     t.start()  # 开启线程
#
#     for i in range(1000):
#         print("主线程", i)


# 创建多个线程且有参数
class MyThread(Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):  # 固定的 -> 当线程被执行时, 被执行的就是run()
        for i in range(1000):
            print(self.name, i)

if __name__ == '__main__':
    jie = MyThread("林俊杰")
    # jie.run()  # 表示方法被调用  -> 还是单线程
    jie.start()  # 开启线程

    xun = MyThread("陈奕迅")
    xun.start()